bitkeeper revision 1.1149.2.2 (41125ca87nJjUEYoSsWzlx9ToYbRuA)
authorcl349@freefall.cl.cam.ac.uk <cl349@freefall.cl.cam.ac.uk>
Thu, 5 Aug 2004 16:13:28 +0000 (16:13 +0000)
committercl349@freefall.cl.cam.ac.uk <cl349@freefall.cl.cam.ac.uk>
Thu, 5 Aug 2004 16:13:28 +0000 (16:13 +0000)
Put some memory into the DMA zone.  Makes memory allocation for drivers
using a coherent_dma_mask happy.

linux-2.6.7-xen-sparse/arch/xen/i386/mm/init.c

index 779a25073de70e9e8ef64b78bf4994bbe20b1856..339da5061e15cfac848f454bd747606b54c6be84 100644 (file)
@@ -422,15 +422,21 @@ void zap_low_mappings (void)
 void __init zone_sizes_init(void)
 {
        unsigned long zones_size[MAX_NR_ZONES] = {0, 0, 0};
-       unsigned int high, low;
+       unsigned int max_dma, high, low;
        
+       max_dma = virt_to_phys((char *)MAX_DMA_ADDRESS) >> PAGE_SHIFT;
        low = max_low_pfn;
        high = highend_pfn;
        
-       zones_size[ZONE_NORMAL] = low;
+       if (low < max_dma)
+               zones_size[ZONE_DMA] = low;
+       else {
+               zones_size[ZONE_DMA] = max_dma;
+               zones_size[ZONE_NORMAL] = low - max_dma;
 #ifdef CONFIG_HIGHMEM
-       zones_size[ZONE_HIGHMEM] = high - low;
+               zones_size[ZONE_HIGHMEM] = high - low;
 #endif
+       }
        free_area_init(zones_size);     
 }
 #else